<?php
/**
 * 
 * Controlador de Gestion de control interno
 * @author natanael
 * 
 */
class Controlinterno extends Controller
{
	 public function __construct()
	 {
	          parent::Controller();
	          $this->load->library(array('chcalendario', 'email', 'chcompany', 'ChFopen'));	  
	                  
	          $this->load->model(array('mcompania','metapas','mestatus','mservicios',
	                                   'usuarios','mprocesos','mciestatus','mcigestion',
	                                   'mcihistorico','mjurisdiccion','mresponsable','provincias',
	                                   'enestatus','CompaniaHistorico', 'sendmailc24h','smssetupci',
	                                   'mscript', 'mfrom', 'mcompania','mailheaderci','maildetallesci',
	                                   'vistaproseso','mseguimientosend','mdetallesend'));
	 }
	      
	 public function index()
	 {
	      $listP = count($this->mcigestion->datosPendientes()) - count($this->mcigestion->loadGestion());
	      $this->load->view('main', array('content_page' => 'cigestion_list','menutop' => 3,'listP'=>$listP));
	 }
	 
	 public function seguimientosGenerados()
	 {
	    $this->load->view('main', array('content_page' => 'headerci','menutop' => 0));
	 }
	 
     public function dataheader()
     {
           $page = $this->input->post('page') ? $this->input->post('page') : 1; // Pagina Actual o 1 por default
		   $sortname = $this->input->post('sidx') ? $this->input->post('sidx') : 'Fecha'; // Columna para el order by
		   $sortorder = $this->input->post('sord') ? $this->input->post('sord') : 'desc'; // Orden (asc|desc)
		   $limit = $this->input->post('rows') ? $this->input->post('rows') : 30;
		   $start = $limit * $page - $limit;
		   if($start < 0) $start = 0;
  
		    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
		    header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
		    header("Cache-Control: no-cache, must-revalidate" );
		    header("Pragma: no-cache" );

	      $records = $this->mseguimientosend->loadRegistro($start, $limit, false, false, 2);
	      
		  $totalRecords = count($records);
		

		  $totalPages = ceil($totalRecords/$limit);
		     if ($page > $totalPages) $page = $totalPages;

		   $json_output = array(
		       'page'		=> $page,
		       'total'		=> $totalPages,
		       'records'	=> $totalRecords,
		       'rows'		=> array()
		  );

		  if($records != false) {
		  	  foreach($records as $k) {
		  	  	$data = explode(" ",$k->getFecha());
		  	  	$data = explode("-",$data[0]);
		  	  	
		  	  	$data = $data[1].'/'.$data[2].'/'.$data[0];

		  	  	$usuario = $this->usuarios->LoadUsuarioById($k->getIdUsuario());
		  	  	
				$arr = $json_output['rows'][] = array(
				               'Id'          => $k->getIdSeguimiento(),
				               'Fecha'       => $data,
				               'Type'        => $k->getType(),
				               'usuario'     => $usuario->getNombreUsuario(),
				               'cant'        => $k->getCantidadSegimiento());
				
			}
		}

		$a=json_encode($json_output);
		$a=str_replace('\\','',$a);
		echo $a;
    }

     public function sendSms($arrayData)
     {   
         $this->_send($arrayData, "SMS");    
     }
     
     public function sendMail($arrayData)
     {   
   	   $this->_send($arrayData, "MAIL");    
     }
          
     private function _send($arrayData, $tipo)
     {
         	
         $arrayData = explode("-",$arrayData);
   	     $idSeguimientoSend = 0;
   	     $contadorSend = 0; 
   	     
   	     $dataSeguimientoSend = array("Id_Usuario"    => $this->session->userdata('LOGGED_USR_ID'),
   	                                  "Fecha"         => date("Y-m-d")." 00:00:00",
   	                                  "Type"          => $tipo,
   	                                  "Session"       => 2);
   	   
         if ($this->mseguimientosend->addReguistro($dataSeguimientoSend) == true){
              	          
         	      $dataWhere = array("Id_Usuario" => $this->session->userdata('LOGGED_USR_ID'),
              	                     "Type"       => $tipo,
              	                     "Session"    => 2);
              	          
              	  $objeto = $this->mseguimientosend->loadRegistroByWhere($dataWhere);      
                  $idSeguimientoSend = $objeto[0]->getIdSeguimiento();
         }
         
         
   	    foreach ($arrayData as $k){
   	   	    	  
   	          $objetoCompany = $this->mcompania->LoadCompaniaById($k);
   	          
   	          $idLastproseso = $this->mprocesos->loadLastProceso($k);
		      $lastproseso = $this->mprocesos->loadProcesoById($idLastproseso);	
                          
		      $whereArray = array("Tipo"     => $tipo,
		                          "IdEtapa"  => $lastproseso->getIdEtapa());
		                   
		      $idScript = $this->smssetupci->loadRegistro();
		               
		          if ($tipo == "SMS") {
		                 $objetoScript = $this->mscript->LoadRegistroById($idScript[0]->getScriptFirma());
		          }else{
		                $objetoScript = $this->mscript->LoadRegistroById($idScript[0]->getScriptEmail());
		          }
		      
		          $objetoUser = $this->usuarios->LoadUsuarioById($this->session->userdata('LOGGED_USR_ID'));	

		        /**
		       * @var $bodyReal String
		       * Retorna el Cuerpo del mensage Ya Filtrado Con todo Por Haora solo es balido para los SMS
		       * 
		       */
		      $bodyReal = $this->_bodyMensage($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), false, $objetoUser->getNombreUsuario(), $objetoUser->getEtx(), $objetoScript->getBodyScript());
		    
		      
		      /** Esta parte es solo valida para los SMS Typo */
		      
		      if ($tipo == "SMS") {
		      	       $expTel = array('/\ /', '/\-/','/\//','/\./','/\,/','/([A-Z])/','/([a-z])/','/\(/','/\)/');
      	               $telefono1 = trim(preg_replace($expTel,"", $objetoCompany->getTelefono1Compania()));
      	               $telefono2 = trim(preg_replace($expTel,"", $objetoCompany->getTelefono2Compania()));
		                
      	               if (strlen($telefono1) > 9){
      	               	    $telefono1 =  
      	                    $contadorSend += $this->_sendSms($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), $telefono1, $idSeguimientoSend, $bodyReal, $lastproseso->getIdEtapa());
      	               }
      	                
      	               
      	              
      	               $contadorSend += $this->_sendSms($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), $telefono2, $idSeguimientoSend, $bodyReal, $lastproseso->getIdEtapa()); 

      	               $descripcionProceso = "SMS CI - ".$bodyReal;
		      }
		      
		      if ($tipo == "MAIL"){
		      
		           $contadorSend += $this->_sendMail($objetoCompany->getEmailCompania(), $objetoCompany->getNombreCompania(), $bodyReal, $lastproseso->getIdEtapa(), $objetoCompany->getContacto(), $idSeguimientoSend, $objetoScript->getSubjectScript());
		           $descripcionProceso = "Envio automatico de MAIL";
		      }
		      
      	      $dias = $this->chcalendario->calcularDias($lastproseso->getFechaSys());
      	    
      	      $arrayDataProsesoUpdate = array("dias"   => intval($dias),
      	                                      "Fechas" => date("Y-m-d H:i:s"));
      	         	    
      	      $this->mprocesos->upDateProceso($lastproseso->getIdProceso(), $arrayDataProsesoUpdate);
      	   
      	      $arrayDataProseso = array("IdEtapa"             => $lastproseso->getIdEtapa(),
      	                                "IdEstatus"           => $lastproseso->getIdEstatus(),
      	                                "DescripcionProceso"  => $descripcionProceso,
      	                                "FechaProceso"        => date("Y-m-d H:i:s"),
      	                                "FechaSysProceso"     => date("Y-m-d H:i:s"),
      	                                "IdResponsable"       => $lastproseso->getIdResponsable(),
      	                                "IdUsuario"           => $this->session->userdata('LOGGED_USR_ID'),
      	                                "IdCompania"          => $k,
      	                                "Comentario"          => $descripcionProceso, 
      	                                "dias"                => 0,
      	                                "Fechas"              => "0000-00-00 00:00:00");
      	    
      	      $this->mprocesos->procesoAdd($arrayDataProseso);

   	   }
   	   
   	   $this->mseguimientosend->upDateRegistro(array("CantidadSegimiento" => $contadorSend), $idSeguimientoSend);
   	   
   	    if ($tipo == "SMS"){
   	         chmod ("public/sms/sms_data5.txt", 0777); 	    
   	    }
   	   
   	   $this->session->set_flashdata('error', 2);
   	   $this->session->set_flashdata('status_message', 'Seguimiento enviado correctamente');
   	   redirect('controlinterno');
  }
   
  private function _sendSms($referencia, $contacto, $telefono, $idSeguimiento, $bodyReal, $etapa)
   {
        if (strlen($telefono) > 7){
      	    	
        	    $telefono = substr($telefono, 0, 10);
        	
      	    	$arrayDetalleSend = array("Id_Etapa"       => $etapa,
      	    	                          "Referencia"     => $referencia,
      	    	                          "Contacto"       => $contacto,
      	    	                          "telefono"       => $telefono,
      	    	                          "Id_Seguimiento" => $idSeguimiento);
      	    	
      	    	$this->mdetallesend->addReguistro($arrayDetalleSend);
      	    	
      	        $this->chfopen->generalCsv($telefono, $bodyReal);
      	        
      	        return 1;
        }
          
        return 0;
    }
    
    private function _sendMail($mail, $referencia, $bodyMensage, $etapa, $contacto, $idSeguimiento, $subjectScript)
    {    
    	
    	if (strlen($mail) > 5) {
    		  
    		   /** $from 1  es igual a info@company24h.com */
               $from = $this->mfrom->LoadRegistroById(1);
 
               $this->email->from($from->getBody(), $from->getTitle());
               $this->email->to($mail);
               $this->email->set_mailtype('html');
               $this->email->subject($subjectScript.'-'.$referencia);
               $this->email->message($bodyMensage);

               $this->email->send();
          
               $arrayDetalleSend = array("Id_Etapa"       => $etapa,
      	    	                         "Referencia"     => $referencia,
      	    	                         "Contacto"       => $contacto,
      	    	                         "telefono"       => $mail,
      	    	                         "Id_Seguimiento" => $idSeguimiento);
      	    	
      	       $this->mdetallesend->addReguistro($arrayDetalleSend);
      	       
      	       return 1;
    	}
    	
    	   return 0;
    
    }
   
   private function _bodyMensage($referencia = false, $conctato = false, $servicio = false, $usuario = false, $ext = false, $body)
   {
   	      if($referencia != false)
            $body = trim(preg_replace(array('/\XXXREFERENCIA/'), $referencia, $body));

          if ($conctato != false)  
            $body = preg_replace(array('/\XXXCONTACTO/'), $conctato, $body);
            
          if ($servicio != false)  
            $body = preg_replace(array('/\XXXSERVICIO/'), $servicio, $body);
            
          if ($usuario != false)  
            $body = preg_replace(array('/\XXXUSUARIO/'), $usuario, $body);
            
          if ($ext != false)  
            $body = preg_replace(array('/\XXXEXT/'), $ext, $body); 

           return $body;  
   }
	      
   public function data($dataFiltro = false)
  	{
          	
          	    $page = $this->input->post('page') ? $this->input->post('page') : 1;
		        $sortname = $this->input->post('sidx') ? $this->input->post('sidx') : 'idRegistro';
		        $sortorder = $this->input->post('sord') ? $this->input->post('sord') : 'asc';
		        $limit = $this->input->post('rows') ? $this->input->post('rows') : 200;
		
		        $start = $limit * $page - $limit;
		             if($start < 0) $start = 0;

		    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
		    header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
		    header("Cache-Control: no-cache, must-revalidate" );
		    header("Pragma: no-cache" );
		       
		      $idScript = $this->smssetupci->loadRegistro(); 
		      $idScript = $idScript[0];
		      
     	       $records = $this->vistaproseso->loadProsseso(array(10,11));
     	
     	       $totalRecords = count($records);

		       $totalPages = ceil($totalRecords/$limit);
		              if ($page > $totalPages) $page = $totalPages;

		       $json_output = array(
		                        'page'		 => $page,
		                        'total'      => $totalPages,
		                        'records'	 => $totalRecords,
		                        'rows'		 => array()
		                       );
		                    
		      if($records != false){
			      foreach($records as $compania){
                           
			      	       if ($dataFiltro != false) {
			      	       	   if ($dataFiltro != $compania->getIdEtapa()){
			      	       	       continue;
			      	       	   }   
			      	       }
			      	
			      	       $servicio = $this->mservicios->LoadServicioById($compania->getIdServicio());
			      	       $mEtapa = $this->metapas->LoadEtapaById($compania->getIdEtapa());
			      	       
			      	       $diasP = $this->chcalendario->calcularDias($compania->getFechaSysProceso());
			      	       
			      	        
			      	       
			      	       
			      	       $allProseso = $this->mprocesos->getDataIdCompany(array('IdCompania' => $compania->getIdCompany(),
			      	                                                              'IdEtapa'    => $compania->getIdEtapa()));
			      	       
			      	       $dataFistProseso = $allProseso[0]->getFechaSys();
			      	       $diasE = $this->chcalendario->calcularDias($dataFistProseso);
			      	       
			      	       if ($diasE < $idScript->getEtapaDesde())
			      	          continue;
			      	          
			      	       if ($idScript->getEtapaHasta() < $diasE)
			      	          continue; 
			      	       
			      	       if ($mEtapa->GetTiempoEstimado() <= $diasE){
			      	           $imagen_etapa="<img src='http://code.company24h.com/public/images/3.png'/>";
			      	       }else{
			      	            $imagen_etapa="<img src='http://code.company24h.com/public/images/1.png'/>";
			      	       }
			      	    
			      	       
				           $arr = $json_output['rows'][] = array(
				                                          'idCompania'         => $compania->getIdCompany(),
				                                          'referencia'         => $compania->getNombreCompania(),
				                                          'servicio'           => $servicio->getNombreServicio(),
				                                          'statusS'            => $compania->getIdEtapa(),
				                                          'diasP'              => intval($diasP),
				                                          'diasE'              => intval($diasE),
				                                          'idEtapa'            => $mEtapa->GetNombre(),
				                                          'contacto'           => $compania->getContacto(),
				                                          'telefono'           => $compania->getTelefono1Compania(),
				                                          'gEtapa'             => $imagen_etapa);	
			      }
		      }
     	
    	$a=json_encode($json_output);
		$a=str_replace('\\','',$a);
		echo $a;
		
       }
      
       public function procesos_data()
	   {
		     $page = $this->input->post('page') ? $this->input->post('page') : 1;
		     $sortname = $this->input->post('sidx') ? $this->input->post('sidx') :'IdCompania';
		     $sortorder = $this->input->post('sord') ? $this->input->post('sord'):'DescripcionProceso';
		     $limit = $this->input->post('rows') ? $this->input->post('rows') : 10;
		     $start = $limit * $page - $limit;

		     $json_output = array(
		                         'page'		 => 1,
		                         'total'	 => 1,
		                         'records'	 => 0,
		                         'rows'		 => array());
		     
		    

		if($this->input->post('id_compania'))
		{
			 $idCompania = $this->input->post('id_compania');
			 $idEtapa = $this->input->post('id_etapa');
			
			if($start < 0) $start = 0;

			header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
			header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
			header("Cache-Control: no-cache, must-revalidate" );
			header("Pragma: no-cache" );
			
			$records = $this->mprocesos->LoadProcesos($idCompania);
			$totalRecords = count($records);
			
			$idLastProsesso = $this->mprocesos->loadLastProceso($idCompania);
			$lastProsesso = $this->mprocesos->loadProcesoById($idLastProsesso);
			
			if ($totalRecords>0)
	        {
				$totalPages = ceil($totalRecords/$limit);
				if ($page > $totalPages) $page = $totalPages;

				$json_output = array
				(
				'page'		=> $page,
				'total'		=> $totalPages,
				'records'	=> $totalRecords,
				'rows'		=> array());
				
		
				if($records != false)
				{
					foreach($records as $proceso){
				
						if ($lastProsesso->getIdEtapa() != $proceso->getIdEtapa()) {
							   continue;
						}
		
						$etapa = $this->metapas->LoadEtapaById($proceso->getIdEtapa());
						$estatus = $this->mestatus->LoadEstatusById($proceso->getIdEstatus());
						$usuario = $this->usuarios->LoadUsuarioById($proceso->getIdUsuario());
	
						$json_output['rows'][] = array(
						        'IdProceso'                  => $proceso->getIdProceso(),
						        'IdEtapa'                    => $etapa->GetNombre(),
						        'IdEstatus'                  => $estatus->getNombre(),
						        'DescripcionProceso'         => $proceso->getDescripcion(),
						        'FechaProceso'               => substr($proceso->getFechaProceso(),0,10),
					      	    'FechaProcesoR'              => substr($proceso->getFechaSys(),0,10),
						        'Dias'                       => $proceso->getDias(),
						        'Comentario'                 => $usuario->getNombreUsuario());
					}
				}
			}
		
			$this->session->set_userdata('COMPANIA',$idCompania);
			echo json_encode($json_output);
		}
	}

}